/* Copyright (c) 2004-2008, Andriy Nikolov
 * All rights reserved.
 * 
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 * 
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 * 
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */
package org.processmining.exporting.email;

import java.io.*;
import java.util.*;

import org.processmining.exporting.*;
import org.processmining.email.*;
import org.processmining.framework.plugin.*;

/**
 * <p>Export plugin class for exporting the sociogram into AGNA format.</p>
 * @author Andriy Nikolov
 * @version 1.0
 */
public class EMailSNAAgnaExport implements ExportPlugin {

  Sociogram sociogram;

  public EMailSNAAgnaExport() {
  }

  public String getName() {
    return "AGNA";
  }

  public String getHtmlDescription()
  {
    return null;
  }

  public boolean accepts(ProvidedObject object) {
    Object[] o = object.getObjects();
    for (int i = 0; i < o.length; i++) {
      if (o[i] instanceof Sociogram) {
        return true;
      }

    }
    return false;
  }

  public void export(ProvidedObject object, OutputStream output) throws IOException {
    Object[] o = object.getObjects();
    EMailRecipient tmp;

    for (int i = 0; i < o.length; i++) {
      if (o[i] instanceof Sociogram) {
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(output));
        sociogram = (Sociogram)o[i];
        int matrixSize = sociogram.getEmployeesList().size();

        bw.write("Agna Data File\nNetwork Name\t exported \nNetwork Size\t");
        bw.write(String.valueOf(matrixSize) + "\n");
        bw.write("Has Viewer\tyes\nNode Names\n");

        System.out.println("users = " + matrixSize);
        System.out.println("matrixsize = " + matrixSize);
        for(int j=0; j<matrixSize; j++)
        {
          tmp = (EMailRecipient)sociogram.getEmployeesList().get(j);
          bw.write(tmp.getName()+"\t");
        }
        bw.write("\nEnd Node Names\nNetwork Matrix\n");


        for(int j=0; j<matrixSize; j++)
        {
          for (int k=0; k<matrixSize;k++)
            bw.write(Double.toString(sociogram.getWeight(j,k)) + "\t");
          bw.write("\n");
        }
        bw.write("End Network Matrix\n");

        bw.close();
        return;
      }
    }
  }

  public String getFileExtension() {
    return "AGN";
  }
}
